Skip to content

docs: say that merging to main is a rollout, because it is - #5

Merged
azlekov merged 1 commit into
mainfrom
docs/v1-moves-automatically
Aug 25, 2026
Merged

docs: say that merging to main is a rollout, because it is#5
azlekov merged 1 commit into
mainfrom
docs/v1-moves-automatically

Conversation

@azlekov

@azlekov azlekov commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Both documents claimed a staging step that no longer exists.

Document Claim Reality
README "advanced only after a change has run green on a real repo" The tag moves automatically, in the release run
README "merge to main, verify on one repo pinned to main, then let the tag move" There is no window between the merge and the tag moving
AGENTS.md "A change here is inert until v1 moves. Merging to main no longer changes anyone's CI." Merging to main changes everyone's CI immediately

The successCmd force-moves the major tag in the same run as the release, so merging puts every caller on the new code before anyone looks at it. That includes the picker and composite actions these workflows reference at @v1 internally, so a bad change flips the whole chain at once.

The bullet promising the opposite sat directly above the paragraph describing the automation that broke it.

This was demonstrated live while writing this: merging Renovate #1 cut 1.0.2 and moved v1 with no human step in between.

What changes

Only the documents. The automatic move is deliberate and stays.

  • Merging to main is a rollout. Verify in the pull request, because after the merge it is live everywhere.
  • Rolling back is a tag move, git tag -f v1 <previous tag> && git push -f origin v1, not a revert. Callers hold no version of their own.
  • @main is still the wrong pin, but for a narrower reason than before: @v1 moves only when a release is cut, so a docs: or ci: commit never reaches a caller, and @v1 is a version you can name in a rollback.

Does this work at v2 and v3

Yes, unchanged. The successCmd derives the major from the version rather than assuming a single digit. Verified against the real lodash template semantic-release uses:

  1.0.1   -> git tag -f v1  v1.0.1  && git push -f origin v1
  2.0.0   -> git tag -f v2  v2.0.0  && git push -f origin v2
  10.0.0  -> git tag -f v10 v10.0.0 && git push -f origin v10

10.0.0 is the one that matters: a naive first-character approach would produce v1 and silently clobber the tag repos are still pinned to.

Releasing 2.0.0 creates v2 and stops touching v1, which freezes at the last 1.x. That is what a caller pinning a major is paying for.

One caveat is now recorded. main is the only release branch, so once 2.0.0 ships there is no way to release a 1.x patch. That needs "branches": ["main", "1.x"] in .releaserc.json, and it is easier to add before an incident than during one.

Verification

Docs only, no behaviour change. Suite green: agent-gate 28/28, sticky-comment 10/10, preset table agrees, release and Renovate config parse, all YAML parses.

Both documents claimed a staging step that no longer exists. The README said the
tag is "advanced only after a change has run green on a real repo" and told the
reader to verify on a repo pinned to main "then let the tag move". AGENTS.md said
a change here "is inert until v1 moves" and that merging to main "no longer
changes anyone's CI".

None of that has been true since the release automation landed. The successCmd
force-moves the major tag in the same run as the release, so merging to main puts
every caller on the new code immediately, including the picker and composite
actions these workflows reference at v1 internally. The bullet promising the
opposite sat directly above the paragraph describing the automation that broke
it.

The automatic move is deliberate and stays. What changes is that the documents
now describe it: verify in the pull request, because after the merge it is
already live, and rolling back is a tag move rather than a revert.

Also answers the question the setup invites. The successCmd derives the major
from the version, so it needs no change at v2 or beyond: 2.0.0 creates v2 and
leaves v1 frozen at the last 1.x, which is what a caller pinning a major is
paying for. Verified against the real template for 1.0.1, 1.4.0, 2.0.0, 3.1.2
and 10.0.0, the last of which would break a naive first-character approach.

The caveat that comes with it is recorded too: main is the only release branch,
so once 2.0.0 ships there is no way to release a 1.x patch without adding a
maintenance branch, and that is easier to add before it is needed.
@azlekov
azlekov merged commit 729d575 into main Aug 25, 2026
1 check passed
@azlekov
azlekov deleted the docs/v1-moves-automatically branch August 25, 2026 19:50
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 1.0.3 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant